#ifndef EXCHANGEACCESSTOKENCOMMAND_H
#define EXCHANGEACCESSTOKENCOMMAND_H

#include "base_command.h"
#include <QString>
#include <QJsonObject>

// ExchangeAccessTokenCommand 命令类
// 负责将 checkInToken 交换为 accessToken
class ExchangeAccessTokenCommand : public BaseCommand
{
    Q_OBJECT

public:
    explicit ExchangeAccessTokenCommand(QObject *parent = nullptr);
    ~ExchangeAccessTokenCommand();
    
    // 设置 QNetworkAccessManager 实例（重写基类方法以连接信号）
    void setNetworkAccessManager(QNetworkAccessManager *networkManager);
    
    // 执行命令（异步方式）
    // 返回：是否成功发起请求（异步操作，实际结果通过信号通知）
    // 注意：domainId 将从 BackendService 内部获取
    bool execute();

signals:
    // 获取AccessToken完成信号
    void exchangeAccessTokenCompleted(int resultCode, const QString &message, const QString &accessToken);

private slots:
    // 处理交换AccessToken响应
    void handleExchangeAccessTokenResponse(QNetworkReply *reply);

private:
    // 构建请求 URL
    QString buildRequestUrl(const QString &baseUrl);
    
    // 保存 accessToken 到 BackendService
    void saveAccessToken(const QString &accessToken);
};

#endif // EXCHANGEACCESSTOKENCOMMAND_H

